package com.java.servlet.web.menu.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import com.java.servlet.web.commons.GenericDao;
import com.java.servlet.web.conexion.PoolConnection;
import com.java.servlet.web.menu.dao.sql.SqlMenu;
import com.java.servlet.web.menu.vo.MenuVo;

public class MenuDaoImpl extends GenericDao implements MenuDao {
	private static final Logger log = Logger.getLogger(MenuDaoImpl.class);
	private Connection con = null;

	public MenuDaoImpl() {
		con = PoolConnection.getInstance().getConection();
	}

	@Override
	public List<MenuVo> getMenuUsuario(int idRol) {
		int index = 1;
		PreparedStatement stm = null;
		ResultSet rs = null;
		List<MenuVo> listaMenu = null;
		try {
			stm = con.prepareStatement(SqlMenu.LISTA_MENU);
			stm.setInt(index++, idRol);
			rs = stm.executeQuery();
			listaMenu = getListaMenuResultSet(rs);
			log.info("LISTA_MENU  [ " + SqlMenu.LISTA_MENU);
		} catch (SQLException ex) {
			log.error("getMenuUsuario  [ " + ex);
			PoolConnection.getInstance().closeConnection(con);
		} finally {
			 try {
	                rs.close();
	                stm.close();
	            } catch (SQLException e) {
	            	log.error("SQLException  [ " + e);
	            } 
		}
		return listaMenu;
	}

	private List<MenuVo> getListaMenuResultSet(ResultSet res) {
		List<MenuVo> listaMenuVo = null;
		try {
			if (res.next()) {
				listaMenuVo = new ArrayList<MenuVo>();
				do {
					MenuVo menuVo = new MenuVo();
					menuVo.setIdRol(res.getInt("ID_ROL"));
					menuVo.setDescRol(res.getString("DESC_ROL"));
					menuVo.setIdMenu(res.getInt("ID_MENU"));
					menuVo.setDescMenu(res.getString("DESC_MENU"));
					menuVo.setParent(res.getString("PARENT"));
					menuVo.setIdParent(res.getInt("ID_PARENT"));
					menuVo.setLink(res.getString("LINK"));

					listaMenuVo.add(menuVo);
				} while (res.next());
			}
		} catch (SQLException ex) {
			log.error("getListaMenuResultSet  [ " + ex);
		}
		return listaMenuVo;
	}
}
